package menus;

import herramientas.BitUtil;
import bitclub.Trabajador;
import java.util.Date;
import java.util.List;

/**
 * @author BIT COMPANY
 */
public class OpcionesTrabajadores {

    /**
     * Da de alta un trabajador
     */
    public static Trabajador opcionTrabajadoresDarAlta() {
        Trabajador trabajador;
        BitUtil.borra();

        //Cogemos todos los datos uno a uno
        System.out.println("NUEVO TRABAJADOR");
        System.out.println("____________________");
        String nombre = BitUtil.dameCadenaNoVacio("Nombre: ", 20);
        String apellidos = BitUtil.dameCadenaNoVacio("Apellidos: ", 30);
        String dni = BitUtil.dameEnteroFijoNoVacio("DNI: ", 8);
        String mail = BitUtil.dameCadena("E-mail: ", 40);
        String telFijo = BitUtil.dameEnteroFijo("Tel. Fijo: ", 9);
        String telMovil = BitUtil.dameEnteroFijo("Tel. Movil: ", 9);
        String direccion = BitUtil.dameCadenaNoVacio("Dirección: ", 50);
        String cp = BitUtil.dameCadena("Codigo postal: ", 5);
        String localidad = BitUtil.dameCadenaNoVacio("Localidad: ", 30);
        Date fechaNacimiento = BitUtil.dameFechaNoVacio("Fecha nacimiento (dia/Mes/año): ");
        char sexo = BitUtil.dameSexo("Sexo: (Hombre/Mujer): ");
        Date fechaAlta = new Date();
        String password = BitUtil.dameCadenaNoVacio("Password: ", 10);
        //COMPROBAR SI EL USUARIO TIENE PERMISOS DE ADMINISTRADOR PARA DARSELO A OTRO...
        boolean administrador = BitUtil.dameConfirmacion("Tiene permisos de administrador? (s/n) ");

        //Creamos el cliente con todos los datos recopilados
        trabajador = new Trabajador(nombre, apellidos, dni, true, mail, telFijo, telMovil, direccion, cp, localidad, fechaNacimiento, sexo, fechaAlta, null, password, administrador);

        //Borramos pantalla, mostramos el cliente completo y pedimos confirmación
        BitUtil.borra();
        System.out.println(trabajador.toString());
        boolean confirmado = BitUtil.dameConfirmacion("Dar de alta este trabajador? (s/n) ");

        //Si confirmamos pedimos al objeto que se guarde y si no lo descartamos
        if (confirmado) {
            trabajador.nuevo();
            return trabajador;
        } else {
            return null;
        }
    }

    /**
     * Ver datos de trabajador
     * @param trabajador 
     */
    public static void opcionTrabajadoresVer(Trabajador trabajador) {
        System.out.println(trabajador.toString());
        BitUtil.esperaEnter();
    }

    /**
     * Edita los datos de un trabajador
     */
    public static Trabajador opcionTrabajadoresEditar(Trabajador trabajador) {
        int respuesta = 0;
        boolean algunCambio = false;
        BitUtil.borra();

        Trabajador copia = new Trabajador(trabajador.getNombre(), trabajador.getApellidos(), trabajador.getDni(),
                trabajador.isActivo(), trabajador.getMail(), trabajador.getTel_fijo(), trabajador.getTel_movil(),
                trabajador.getDireccion(), trabajador.getCodigoPostal(), trabajador.getLocalidad(),
                trabajador.getNacimiento(), trabajador.getSexo(), trabajador.getFechaAlta(),
                trabajador.getFechaBaja(), trabajador.getPassword(), trabajador.isAdministrador(),trabajador.getId());

        
        do {
            respuesta = BitUtil.muestraMenu("EDITAR TRABAJADOR", new String[]{"Nombre", "Apellidos", "DNI", "Email", "Telefono Fijo", "Telefono Movil", "Dirección", "Codigo Postal", "Localidad", "Fecha de Nacimiento", "Sexo", "Fecha de Alta", "Password", "Administrador"});
            switch (respuesta) {
                case 1:
                    System.out.println("Nombre: " + trabajador.getNombre());
                    trabajador.setNombre(BitUtil.dameCadenaNoVacio("Nuevo Nombre: ", 20));
                    algunCambio = true;
                    break;
                case 2:
                    System.out.println("Apellidos: " + trabajador.getApellidos());
                    trabajador.setApellidos(BitUtil.dameCadenaNoVacio("Nuevo Apellidos: ", 30));
                    algunCambio = true;
                    break;
                case 3:
                    System.out.println("DNI: " + trabajador.getDni());
                    trabajador.setDni(BitUtil.dameEnteroFijoNoVacio("Nuevo DNI: ", 8));
                    algunCambio = true;
                    break;
                case 4:
                    System.out.println("Email: " + trabajador.getMail());
                    trabajador.setMail(BitUtil.dameCadena("Nuevo E-mail: ", 40));
                    algunCambio = true;
                    break;
                case 5:
                    System.out.println("Telefono Fijo: " + trabajador.getTel_fijo());
                    trabajador.setTel_fijo(BitUtil.dameEnteroFijo("Nuevo Tel. Fijo: ", 9));
                    algunCambio = true;
                    break;
                case 6:
                    System.out.println("Telefono Movil: " + trabajador.getTel_movil());
                    trabajador.setTel_movil(BitUtil.dameEnteroFijo("Nuevo Tel. Movil: ", 9));
                    algunCambio = true;
                    break;
                case 7:
                    System.out.println("Direccion: " + trabajador.getDireccion());
                    trabajador.setDireccion(BitUtil.dameCadenaNoVacio("Nueva Dirección: ", 50));
                    algunCambio = true;
                    break;
                case 8:
                    System.out.println("Codigo Postal: " + trabajador.getCodigoPostal());
                    trabajador.setCodigoPostal(BitUtil.dameCadena("Nuevo Codigo postal: ", 5));
                    algunCambio = true;
                    break;
                case 9:
                    System.out.println("Localidad: " + trabajador.getLocalidad());
                    trabajador.setLocalidad(BitUtil.dameCadenaNoVacio("Nueva Localidad: ", 30));
                    algunCambio = true;
                    break;
                case 10:
                    System.out.println("Fecha Nacimiento: " + trabajador.getNacimiento());
                    trabajador.setNacimiento(BitUtil.dameFechaNoVacio("Nueva Fecha nacimiento (dia/Mes/año): "));
                    algunCambio = true;
                    break;
                case 11:
                    System.out.println("Sexo: " + trabajador.getSexo());
                    trabajador.setSexo(BitUtil.dameSexo("Nuevo Sexo: (Hombre/Mujer): "));
                    algunCambio = true;
                    break;
                case 12:
                    System.out.println("Fecha Alta: " + trabajador.getFechaAlta());
                    trabajador.setFechaAlta(BitUtil.dameFechaNoVacio("Nuevo Fecha Alta (dia/Mes/año): "));
                    algunCambio = true;
                    break;
                case 13:
                    trabajador.setPassword(BitUtil.dameCadenaNoVacio("Nuevo Password: ", 10));
                    algunCambio = true;
                    break;
                case 14:
                    //COMPROBAR SI EL USUARIO TIENE PERMISOS DE ADMINISTRADOR PARA DARSELO A OTRO...
                    trabajador.setAdministrador(BitUtil.dameConfirmacion("Nuevos permisos de administrador? (s/n) "));
                    algunCambio = true;
                    break;

            }
        } while (respuesta != 0);

        if (algunCambio) {
            BitUtil.borra();
            System.out.println(trabajador.toString());
            System.out.println("\n");
            boolean confirmar = BitUtil.dameConfirmacion("Desea guardar estos cambios? (S/N) ");
            if (confirmar) {
                trabajador.actualizar();
            } else {
                //Si no aceptamos los cambios debemos recuperar el objeto sin cambios
                return copia;
            }
        }
        
        return trabajador;
    }

    /**
     * Da de baja un trabajador o de alta si ya estaba de baja
     * @param trabajador 
     */
    public static void opcionTrabajadoresDarBaja(Trabajador trabajador) {
        boolean baja;

        BitUtil.borra();
        System.out.println(trabajador.toStringLinea());
        System.out.println("\n");

        if (trabajador.isActivo()) {
            baja = BitUtil.dameConfirmacion("Este trabajador esta ACTIVO quiere darle de baja? (S/N) ");
            if (baja) {
                trabajador.setFechaBaja(new Date());
                trabajador.setActivo(false);
                trabajador.actualizar();
                System.out.println("\nEl trabajador ha sido dado de baja.\n");
                BitUtil.esperaEnter();
            }
        } else {
            baja = BitUtil.dameConfirmacion("Este trabajador esta DE BAJA quiere darle de alta? (S/N) ");
            if (baja) {
                trabajador.setFechaBaja(null);
                trabajador.setActivo(true);
                trabajador.actualizar();
                System.out.println("\nEl trabajador ha sido dado de alta.\n");
                BitUtil.esperaEnter();
            }
        }
    }

    /**
     * Nos permite seleccionar un empleado
     * ((probablemente no haya tantos empleados como para hacer una búsqueda))
     * PRINCIPAL > EMPLEADOS > BUSCAR
     */
    public static Trabajador seleccionarTrabajador() {
        Trabajador trabajador = null;
        int respuesta;
        String nombre;

        do {
            BitUtil.borra();
            nombre = "";
            respuesta = BitUtil.muestraMenu("Seleccion de Trabajador", new String[]{"Por DNI", "Por Nombre", "Todos"}, "No seleccionar ninguno");
            switch (respuesta) {
                case 1:
                    BitUtil.borra();
                    System.out.println(BitUtil.muestraSubrayado("Seleccion de Trabajador", "-") + "\n");
                    String dni = BitUtil.dameEnteroFijo("Introduzca DNI: ", 8);
                    trabajador = Trabajador.seleccionarPorDni(dni);
                    if (trabajador == null) {
                        System.out.println("\nNo hay trabajadores con dicho criterio.\n");
                        BitUtil.esperaEnter();
                    } else {
                        respuesta = 0;
                    }
                    break;
                case 2:
                    BitUtil.borra();
                    System.out.println(BitUtil.muestraSubrayado("Seleccion de Trabajador", "-") + "\n");
                    nombre = BitUtil.dameCadena("Introduzca nombre: ", 20);
                case 3:
                    List<Trabajador> trabajadores = (List) Trabajador.seleccionarPorNombre(nombre);
                    if (trabajadores.isEmpty()) {
                        BitUtil.borra();
                        System.out.println(BitUtil.muestraSubrayado("Seleccion de Trabajador", "-") + "\n");
                        System.out.println("No hay trabajadores con dicho criterio.\n");
                        BitUtil.esperaEnter();
                    } else {
                        String[] opciones = new String[trabajadores.size()];
                        for (int i = 0; i < trabajadores.size(); i++) {
                            opciones[i] = trabajadores.get(i).getNombre() + " " + trabajadores.get(i).getApellidos();
                        }
                        BitUtil.borra();
                        int seleccion = BitUtil.muestraMenu("Seleccion de Trabajador", opciones,"Ninguno");
                        if (seleccion != 0) {
                            trabajador = trabajadores.get(seleccion - 1);
                            respuesta = 0;
                        }
                    }
                    break;
            }
        } while (respuesta != 0);

        return trabajador;
    }
}
